package com.cr.util;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class SplitUtils {

    /**
     * 将给定的列表按照指定的大小分割成多个子列表。
     *
     * @param list  要分割的列表
     * @param size  每个子列表的大小
     * @return      分割后的子列表集合
     */
    public static <T> List<List<T>> splitList(List<T> list, int size) {
        List<List<T>> result = new ArrayList<>();
        List<T> sublist = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            sublist.add(list.get(i));
            if ((i + 1) % size == 0 || i == list.size() - 1) {
                result.add(sublist);
                sublist = new ArrayList<>();
            }
        }
        return result;
    }

    /**
     * 使用Stream API将给定的列表按照指定的大小分割成多个子列表。
     *
     * @param list  要分割的列表
     * @param size  每个子列表的大小
     * @return      分割后的子列表集合
     */
    public static <T> List<List<T>> splitListByStream(List<T> list, int size) {
        return list.stream()
                .collect(Collectors.groupingBy(i -> (list.indexOf(i) / size)))
                .values()
                .stream()
                .map(ArrayList::new)
                .collect(Collectors.toList());
    }

    /**
     * 使用ListUtils将给定的列表按照指定的大小分割成多个子列表。
     *
     * @param list  要分割的列表
     * @param size  每个子列表的大小
     * @return      分割后的子列表集合
     */
    /*public List<List<Integer>> splitList(List<Integer> list, int size) {
        return ListUtils.partition(list, size);
    }*/
}
